package cn.itsource.itsource.job;

import cn.itsource.itsource.domain.OrderAdopt;
import cn.itsource.itsource.mapper.OrderAdoptMapper;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import tk.mybatis.mapper.entity.Example;

import java.util.Date;
import java.util.List;

/*
    订单超时思路分析：
        1. 先从t_order_adopt表中，查询出所有【未付款】的订单
        2. 循环数据，根据last_confirm_time与当前系统时间比较
        3. 如果超过了30分钟，则认为超时，更新 state状态为【交易关闭】
        4. 调用支付宝平台接口，取消订单（可以不写）
                理由：支付宝接口官方，未支付订单默认30分钟也会失效

 */
@Component
public class DingDanChaoShi {
    @Autowired
    private OrderAdoptMapper orderAdoptMapper;


    public void execute() {
//        1. 先从t_order_adopt表中，查询出所有【未付款】的订单
        Example example = new Example(OrderAdopt.class);
        example.and().andEqualTo("state",0);

        List<OrderAdopt> orderAdopts = orderAdoptMapper.selectByExample(example);
//        2. 循环数据，根据last_confirm_time与当前系统时间比较
        for (OrderAdopt orderAdopt : orderAdopts) {
            //        3. 如果超过了30分钟，则认为超时，更新 state状态为【交易关闭】
            Date lastConfirmTime = orderAdopt.getLastConfirmTime();
//            if (new Date().getTime() - lastConfirmTime.getTime() > 30 * 60 * 1000){
//
//            }
            //在commons.lang3包中有一个工具类：DateUtils，专门用来操作日期的
            if(DateUtils.addMinutes(new Date(),-30).getTime() > lastConfirmTime.getTime()){
                orderAdopt.setState(2);//更新订单状态为【交易关闭】
                orderAdoptMapper.updateByPrimaryKeySelective(orderAdopt);
            }
        }


        System.out.println(">>>>>>>>>>>>>>>>");

    }
}
